# from django.conf import settings
# from django.core.files.storage import Storage
# from fdfs_client.client import Fdfs_client
#
#
# class FDFSStorage(Storage):
#     """自定义django文件存储类"""
#
#     def _save(self, name, content):
#         """将文件上传到fdfs"""
#         # conten为上传的文件对象,管理员在远程上传,只能使用根据文件内容上传,不能选择根据文件名上传
#         client = Fdfs_client(conf_path=settings.FASTDFS_CONF_PATH)
#         res = client.upload_by_buffer(content.read())
#         if res.get('Status') != 'Upload successed.':
#             raise Exception('上传文件到FDFS失败')
#         # 获取文件名id,return,django自动将文件名存入响应数据库中
#         file_id = res.get('Remote file_id')
#         return file_id
#
#     def exists(self, name):
#         # django判断文件名是否重复,我们把文件上传到fdfs,文件名不会重复,返回false
#         return False
#
#     def url(self, name):  # 此方法返回什么,图片对象.image.url就是什么,name是数据库中文件ID,拼接nginx前缀即是图片访问路径
#
#         image_url = settings.IMAGE_URL_PREFIX + name
#         return image_url



from django.conf import settings
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client


# 改进
class FDFSStorage(Storage):
    """自定义django文件存储类"""

    def __init__(self, conf_path=None, url_prefix=None):
        if conf_path is None:
            conf_path = settings.FASTDFS_CONF_PATH
        self.conf_path = conf_path

        if url_prefix is None:
            url_prefix = settings.IMAGE_URL_PREFIX
        self.url_prefix = url_prefix

    def _save(self, name, content):
        """将文件上传到fdfs"""
        # conten为上传的文件对象,管理员在远程上传,只能使用根据文件内容上传,不能选择根据文件名上传
        client = Fdfs_client(conf_path=self.conf_path)
        res = client.upload_by_buffer(content.read())
        if res.get('Status') != 'Upload successed.':
            raise Exception('上传文件到FDFS失败')
        # 获取文件名id,return,django自动将文件名存入响应数据库中
        file_id = res.get('Remote file_id')
        return file_id

    def exists(self, name):
        # django判断文件名是否重复,我们把文件上传到fdfs,文件名不会重复,返回false
        return False

    def url(self, name):  # 此方法返回什么,图片对象.image.url就是什么,name是数据库中文件ID,拼接nginx前缀即是图片访问路径

        image_url = self.url_prefix + name
        return image_url
